//
// Created by sjjmw on 3/19/2022.
//

#ifndef LEETCODE_背单词的小智_H
#define LEETCODE_背单词的小智_H
//#include<bitsdc++.h>
#include "iostream"

using namespace std;
typedef long long ll;
const int N=1e5+3;
ll a[N];
int n,k;//n个单词，k天

//二分上限
int check(ll x)
{
    //单词数
    int cnt=0;
    ll sum;
    for(int i=0;i<k;++i)
    {//遍历k天
        sum=0;

        //约束是一天的上限，若到达约束上限，或背完了n个，就结束循环
        while(cnt<n && sum+a[cnt]*a[cnt]<=x)
        {
            sum+=a[cnt]*a[cnt];
            ++cnt;
        }
    }

    //k天以内是否背完，
    return cnt==n;
}
int main()
{
//    ios::sync_with_stdio(false);
//    cin.tie(0);
//    cout.tie(0);
    cin>>n>>k;//n个单词，k天
    for(int i=0;i<n;++i)
        cin>>a[i];

    //用到记忆力最大值范围
    ll l=1,r=1e18,mid;
    ll ans;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(check(mid))//一天记忆上限
        {
            //再此约束下背完，可以缩小约束
            ans=mid;//记录约束

            r=mid-1;//缩小上限
        }
        else
            //背不完了，增大约束
            l=mid+1;
    }
    cout<<ans;
    return 0;
}
#endif //LEETCODE_背单词的小智_H
